package test.ps;

import java.io.RandomAccessFile;

import java.nio.MappedByteBuffer;

import java.nio.channels.FileChannel;

import java.nio.channels.FileChannel.MapMode;

import hyl.core.MyDate;
import hyl.core.MyFun;
import hyl.core.fun.MyByte;

/**
 * 
 * 从 "共享内存" 读出数据
 * 
 */

public class BMem {
	/**
	 * 规定 第0位 是读写标志位
	 * 第20位开始 int 是数据长度
	 * 第24位开始 是数据内容 长度最大 1000字节
	 * @throws Exception
	 * 
	 */
	public static void main(String[] args) throws Exception {
		RandomAccessFile raf = new RandomAccessFile("./swap.mm", "rw");
		FileChannel fc = raf.getChannel();
		MappedByteBuffer mbb = fc.map(MapMode.READ_WRITE, 0, 1024);

		byte[] buff = new byte[1000];
		while (true) {
			if (mbb.get(0) ==(byte)1) {
				int len = mbb.getInt(20); // 读取数据的位置,2 为可读
				mbb.position(24);
				mbb.get(buff, 0, len);
		
				String name = MyByte.bytes2str(buff, 0, len);
				MyFun.print(mbb.position(),name,len);
				mbb.put(0,(byte)0);
				mbb.putInt(20,0);
			} else {
				MyDate.sleep(500);
			}
		}

	}

}